<!doctype html><html lang=zh-hans>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width,initial-scale=1">
<meta http-equiv=x-ua-compatible content="IE=edge">
<meta name=author content="小李刀刀">
<meta name=description content="Spiral 是一个基于 PHP 和 Golang 的混合开发框架，它的理念是让 PHP 负责业务逻辑（应用程序）的开发，而 Golang 负责底层基础服务，这样一来能够很好地把 Golang 的高性能和 PHP 的快速开发和快速部署结合起来。">
<meta name=theme-color content="#3f51b5">
<link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/academicons/1.8.6/css/academicons.min.css integrity="sha256-uFVgMKfistnJAfoCUQigIl+JfUaP47GrRKjf6CTPVmw=" crossorigin=anonymous>
<link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0-1/css/all.min.css integrity="sha256-4w9DunooKSr3MFXHXWyFER38WmPdm361bQS/2KUWZbU=" crossorigin=anonymous>
<link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css integrity="sha256-Vzbj7sDDS/woiFS3uNKo8eIuni59rjyNGtXfstRzStA=" crossorigin=anonymous>
<link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/tomorrow-night.min.css crossorigin=anonymous title=hl-light>
<link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/tomorrow-night.min.css crossorigin=anonymous title=hl-dark disabled>
<script src=https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.1.2/lazysizes.min.js integrity="sha256-Md1qLToewPeKjfAHU1zyPwOutccPAm5tahnaw7Osw0A=" crossorigin=anonymous async></script>
<link rel=stylesheet href="https://fonts.font.im/css?family=Source+Code+Pro:300,400,500,600,700&subset=latin-ext&display=swap">
<link rel=stylesheet href=/css/academic.css>
<script>(function(b,d,e,a,g){b[a]=b[a]||[],b[a].push({'gtm.start':(new Date).getTime(),event:'gtm.js'});var f=d.getElementsByTagName(e)[0],c=d.createElement(e),h=a!='dataLayer'?'&l='+a:'';c.async=!0,c.src='https://www.googletagmanager.com/gtm.js?id='+g+h,f.parentNode.insertBefore(c,f)})(window,document,'script','dataLayer','GTM-5KZH8N7')</script>
<link rel=alternate href=/docs/index.xml type=application/rss+xml title=Spiral中文网>
<link rel=manifest href=/index.webmanifest>
<link rel=icon type=image/png href=/images/icon_hu0b7a4cb9992c9ac0e91bd28ffd38dd00_9727_32x32_fill_lanczos_center_3.png>
<link rel=apple-touch-icon type=image/png href=/images/icon_hu0b7a4cb9992c9ac0e91bd28ffd38dd00_9727_192x192_fill_lanczos_center_3.png>
<link rel=canonical href=https://studyspiral.cn/docs/>
<meta property="twitter:card" content="summary">
<meta property="og:site_name" content="Spiral中文网">
<meta property="og:url" content="https://studyspiral.cn/docs/">
<meta property="og:title" content="Spiral 介绍 | Spiral中文网">
<meta property="og:description" content="Spiral 是一个基于 PHP 和 Golang 的混合开发框架，它的理念是让 PHP 负责业务逻辑（应用程序）的开发，而 Golang 负责底层基础服务，这样一来能够很好地把 Golang 的高性能和 PHP 的快速开发和快速部署结合起来。"><meta property="og:image" content="https://studyspiral.cn/images/logo.svg">
<meta property="twitter:image" content="https://studyspiral.cn/images/logo.svg"><meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2020-02-24T13:06:00+08:00">
<script src=https://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.1/cookieconsent.min.js integrity="sha256-5VhCqFam2Cn+yjw61zbBNrbHVJ6SRydPeKopYlngbiQ=" crossorigin=anonymous></script>
<link rel=stylesheet href=https://cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.1/cookieconsent.min.css integrity="sha256-zQ0LblD/Af8vOppw18+2anxsuaz3pWYyVWi+bTvTH8Q=" crossorigin=anonymous>
<script>window.addEventListener("load",function(){window.cookieconsent.initialise({palette:{popup:{background:"#3f51b5",text:"#fff"},button:{background:"#fff",text:"#3f51b5"}},theme:"classic",content:{message:"本网站使用cookies来确保您在本网站上获得最佳体验。",dismiss:"知道了!",link:"了解更多",href:"https://www.cookiesandyou.com"}})})</script>
<title>Spiral 介绍 | Spiral中文网</title>
</head>
<body id=top data-spy=scroll data-offset=70 data-target=#TableOfContents>
<aside class=search-results id=search>
<div class=container>
<section class=search-header>
<div class="row no-gutters justify-content-between mb-3">
<div class=col-6>
<h1>搜索</h1>
</div>
<div class="col-6 col-search-close">
<a class=js-search href=#><i class="fas fa-times-circle text-muted" aria-hidden=true></i></a>
</div>
</div>
<div id=search-box>
<input name=q id=search-query placeholder=搜索... autocapitalize=off autocomplete=off autocorrect=off spellcheck=false type=search>
</div>
</section>
<section class=section-search-results>
<div id=search-hits>
</div>
</section>
</div>
</aside>
<nav class="navbar navbar-expand-lg navbar-light compensate-for-scrollbar" id=navbar-main>
<div class=container>
<div class="d-none d-lg-inline-flex">
<a class=navbar-brand href=/><img src=/images/logo.svg alt=Spiral中文网>Spiral中文网</a>
</div>
<button type=button class=navbar-toggler data-toggle=collapse data-target=#navbar-content aria-controls=navbar aria-expanded=false aria-label=切换导航>
<span><i class="fas fa-bars"></i></span>
</button>
<div class="navbar-brand-mobile-wrapper d-inline-flex d-lg-none">
<a class=navbar-brand href=/><img src=/images/logo.svg alt=Spiral中文网>Spiral中文网</a>
</div>
<div class="navbar-collapse main-menu-item collapse justify-content-end" id=navbar-content>
<ul class="navbar-nav d-md-inline-flex">
<li class=nav-item>
<a class=nav-link href=/docs/basics/quick-start/><span>教程</span></a>
</li>
<li class=nav-item>
<a class="nav-link active" href=/docs/><span>文档</span></a>
</li>
<li class=nav-item>
<a class=nav-link href=/post/><span>文章</span></a>
</li>
</ul>
</div>
<ul class="nav-icons navbar-nav flex-row ml-auto d-flex pl-md-2">
<li class=nav-item>
<a class="nav-link js-search" href=#><i class="fas fa-search" aria-hidden=true></i></a>
</li>
</ul>
</div>
</nav>
<div class="container-fluid docs">
<div class="row flex-xl-nowrap">
<div class="col-12 col-md-3 col-xl-2 docs-sidebar">
<form class="docs-search d-flex align-items-center">
<button class="btn docs-toggle d-md-none p-0 mr-3" type=button data-toggle=collapse data-target=#docs-nav aria-controls=docs-nav aria-expanded=false aria-label="Toggle section navigation">
<span><i class="fas fa-bars"></i></span>
</button>
<input name=q type=search class=form-control placeholder=搜索... autocomplete=off>
</form>
<nav class="collapse docs-links" id=docs-nav>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/extension/dotenv/>Dotenv</a>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/>总览</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse show">
<li class=active>
<a href=/docs/>Spiral介绍</a>
</li>
<li>
<a href=/docs/about/contributing/>贡献指引</a>
</li>
<li>
<a href=/docs/about/semver/>版本说明</a>
</li>
<li>
<a href=/docs/about/license/>授权协议</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/http/psr-15/>定制 PSR-15 处理器</a>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/start/install/>快速开始</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/start/install/>安装指引</a>
</li>
<li>
<a href=/docs/start/workers/>应用工作进程</a>
</li>
<li>
<a href=/docs/start/structure/>应用程序结构</a>
</li>
<li>
<a href=/docs/start/configuration/>默认配置</a>
</li>
<li>
<a href=/docs/start/commands/>控制台命令</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/basics/quick-start/>入门基础</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/basics/quick-start/>上手指南</a>
</li>
<li>
<a href=/docs/basics/scaffolding/>脚手架</a>
</li>
<li>
<a href=/docs/basics/prototype/>原型开发辅助</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/framework/design/>核心框架</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/framework/design/>设计理念</a>
</li>
<li>
<a href=/docs/framework/application-server/>应用服务器</a>
</li>
<li>
<a href=/docs/framework/config/>配置对象</a>
</li>
<li>
<a href=/docs/framework/kernel/>内核与环境</a>
</li>
<li>
<a href=/docs/framework/container/>容器</a>
</li>
<li>
<a href=/docs/framework/bootloaders/>引导程序</a>
</li>
<li>
<a href=/docs/framework/scopes/>IoC 作用域</a>
</li>
<li>
<a href=/docs/framework/memory/>静态高速缓存</a>
</li>
<li>
<a href=/docs/framework/finalizers/>终结器</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/cookbook/annotated-routes/>速查手册</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/cookbook/annotated-routes/>注解式路由</a>
</li>
<li>
<a href=/docs/cookbook/injector/>容器注入器</a>
</li>
<li>
<a href=/docs/cookbook/domain-core/>领域内核、控制器</a>
</li>
<li>
<a href=/docs/cookbook/golang-library/>Golang服务集成</a>
</li>
<li>
<a href=/docs/cookbook/custom-dispatcher/>自定义调度器</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/component/files/>常用组件</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/component/files/>文件和目录</a>
</li>
<li>
<a href=/docs/component/reactor/>代码生成</a>
</li>
<li>
<a href=/docs/component/tokenizer/>静态分析工具</a>
</li>
<li>
<a href=/docs/component/metrics/>应用指标</a>
</li>
<li>
<a href=/docs/component/data-grid/>数据网格</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/console/configuration/>控制台</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/console/configuration/>安装和配置</a>
</li>
<li>
<a href=/docs/console/commands/>用户命令</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/http/configuration/>HTTP</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/http/configuration/>安装配置</a>
</li>
<li>
<a href=/docs/http/lifecycle/>请求生命周期</a>
</li>
<li>
<a href=/docs/http/request-response/>请求和响应</a>
</li>
<li>
<a href=/docs/http/routing/>路由</a>
</li>
<li>
<a href=/docs/http/errors/>错误页面</a>
</li>
<li>
<a href=/docs/http/middleware/>中间件</a>
</li>
<li>
<a href=/docs/http/golang/>Golang 中间件</a>
</li>
<li>
<a href=/docs/http/cookies/>Cookies</a>
</li>
<li>
<a href=/docs/http/session/>Session</a>
</li>
<li>
<a href=/docs/http/csrf/>CSRF 防护</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/security/encrypter/>安全</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/security/encrypter/>数据加密</a>
</li>
<li>
<a href=/docs/security/validation/>数据验证</a>
</li>
<li>
<a href=/docs/security/rbac/>基于角色的权限控制</a>
</li>
<li>
<a href=/docs/security/authentication/>用户认证</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/filters/configuration/>请求过滤</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/filters/configuration/>安装和配置</a>
</li>
<li>
<a href=/docs/filters/filter/>过滤器</a>
</li>
<li>
<a href=/docs/filters/composite/>复合过滤器</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/database/configuration/>数据库</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/database/configuration/>安装与配置</a>
</li>
<li>
<a href=/docs/database/access/>访问数据</a>
</li>
<li>
<a href=/docs/database/isolation/>逻辑隔离</a>
</li>
<li>
<a href=/docs/database/query-builders/>查询构造器</a>
</li>
<li>
<a href=/docs/database/transactions/>Transactions</a>
</li>
<li>
<a href=/docs/database/introspection/>Schema Introspection</a>
</li>
<li>
<a href=/docs/database/declaration/>Declaration</a>
</li>
<li>
<a href=/docs/database/migrations/>Migrations</a>
</li>
<li>
<a href=/docs/database/errata/>Errata</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/cycle/configuration/>Cycle ORM</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/cycle/configuration/>Configuration</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/queue/configuration/>队列任务</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/queue/configuration/>Configuration</a>
</li>
<li>
<a href=/docs/queue/scraper/>网站爬虫</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/views/configuration/>视图</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/views/configuration/>Configuration</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link href=/docs/stempler/configuration/>Stempler 模板</a>
<ul class="nav docs-sidenav docs-sidenav-sub collapse">
<li>
<a href=/docs/stempler/configuration/>Configuration</a>
</li>
<li>
<a href=/docs/stempler/directives/>Directives</a>
</li>
</ul>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link>国际化</a>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link>GRPC</a>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link>事件广播</a>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link>调试及性能</a>
</div>
<div class=docs-toc-item>
<a class=docs-toc-link>扩展</a>
</div>
</nav>
</div>
<div class="d-none d-xl-block col-xl-2 docs-toc">
<ul class="nav toc-top">
<li><a href=# id=back_to_top class=docs-toc-title>在本页</a></li>
</ul>
<nav id=TableOfContents>
<ul>
<li><a href=#功能特性>功能特性</a></li>
<li><a href=#项目框架>项目框架</a></li>
<li><a href=#核心组件>核心组件</a></li>
<li><a href=#任务调度组件>任务调度组件</a></li>
<li><a href=#http-组件>HTTP 组件</a></li>
<li><a href=#安全和验证组件>安全和验证组件</a></li>
<li><a href=#数据库组件>数据库组件</a></li>
<li><a href=#cycle-orm>Cycle ORM</a></li>
<li><a href=#stempler-模板引擎>Stempler 模板引擎</a></li>
<li><a href=#功能组件>功能组件</a></li>
<li><a href=#协同组件>协同组件</a></li>
<li><a href=#开发组件>开发组件</a></li>
<li><a href=#开源协议>开源协议</a></li>
</ul>
</nav>
</div>
<main class="col-12 col-md-9 col-xl-8 py-md-3 pl-md-5 docs-content" role=main>
<article class=article>
<div class="alert alert-warning" role=alert>
官方文档中文版翻译工作仍在进行中，欢迎 <a href=/post/join-translation/>参与翻译</a>。
</div>
<div class=docs-article-container>
<h1>Spiral 介绍</h1>
<div class=article-style>
<p>
<a href=https://packagist.org/packages/spiral/framework target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/framework/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/framework target=_blank rel=noopener><img src="https://travis-ci.org/spiral/framework.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/framework target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/framework/graph/badge.svg alt=Codecov></a>
<a href="https://scrutinizer-ci.com/g/spiral/framework/?branch=master" target=_blank rel=noopener><img src=https://scrutinizer-ci.com/g/spiral/framework/badges/quality-score.png alt="Scrutinizer Code Quality"></a>
<a href=https://discord.gg/TFeEmCs target=_blank rel=noopener><img src=https://img.shields.io/badge/discord-chat-magenta.svg alt=discord></a></p>
<img src=/images/logo.svg style=height:135px alt="Spiral Framework" align=left>
<p>Spiral Framework 让 PHP 开发重新令人振奋。它利用 PHP 的快速，易部署特性来实现快速开发业务逻辑，同时独特地借助 Golang 来优雅地构建起原生支持 HTTP/2, GRPC, Queue 等特性的基础架构层。Spiral Framework 非常灵活且完全遵守 PSR 规范。开发者在用它构建更快、更高效的应用时一定会感到非常愉悦。</p>
<p>
<a href=https://github.com/spiral/app target=_blank rel=noopener>WEB 项目框架</a> (
<a href=https://github.com/spiral/app-cli target=_blank rel=noopener>命令行项目框架</a>,
<a href=https://github.com/spiral/app-grpc target=_blank rel=noopener> GRPC 项目框架</a>) |
<a href=https://spiral.dev/ target=_blank rel=noopener>官网</a> |
<a href=https://spiral.dev/docs target=_blank rel=noopener><strong>官方文档</strong></a> |
<a href=https://twitter.com/spiralphp target=_blank rel=noopener>Twitter</a> |
<a href=https://github.com/spiral/framework/blob/master/CHANGELOG.md target=_blank rel=noopener>更新日志</a> |
<a href=https://github.com/spiral/docs/blob/master/contributing.md target=_blank rel=noopener>贡献指引</a></p>
<br>
<h2 id=功能特性>功能特性</h2>
<ul>
<li>
<p>从 2013 年以来经历了充分的实战检验</p>
</li>
<li>
<p>
<a href="https://www.techempower.com/benchmarks/#section=test&runid=92383925-3ba7-40fd-88cf-19f55751f01c&hw=ph&test=fortune&l=zik073-v&c=6" target=_blank rel=noopener>超高性能的 PHP 全栈开发框架</a></p>
</li>
<li>
<p>遵守 PSR-{2,3,4,6,7,11,15,16,17}</p>
</li>
<li>
<p>强大的
<a href=https://roadrunner.dev/ target=_blank rel=noopener>应用服务器</a>, 常驻内存式应用内核</p>
</li>
<li>
<p>原生支持队列（ AMQP, SQS, Beanstalk ）和 PHP 后台工作进程</p>
</li>
<li>
<p>GRPC 服务和客户端</p>
</li>
<li>
<p>发布/订阅, 事件广播</p>
</li>
<li>
<p>HTTPS, HTTP/2+Push, 加密 cookies, sessions, CSRF 防护</p>
</li>
<li>
<p>支持 MySQL, MariaDB, SQLite, PostgreSQL, SQLServer, 自动数据迁移（migration)</p>
</li>
<li>
<p>未来 25 年你都要用的
<a href=https://github.com/cycle/orm target=_blank rel=noopener>ORM</a></p>
</li>
<li>
<p>直观的脚手架和原型（它确实可以帮您编写代码）</p>
</li>
<li>
<p>基于静态分析的有用的类型发现</p>
</li>
<li>
<p>身份验证, 基于角色的访问控制(RBAC), 验证, 以及加密</p>
</li>
<li>
<p>可创建自定义 HTML 标签的动态模板引擎（你也可以使用原生 PHP 模板或者 Twig）</p>
</li>
<li>
<p>MVC, HMVC, CQRS, Queue-oriented, RPC-oriented, 命令行程序&mldr; 任何类型的应用</p>
</li>
</ul>
<h2 id=项目框架>项目框架</h2>
<table>
<thead>
<tr>
<th>应用类型</th>
<th>当前状态</th>
<th>项目地址</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/app</td>
<td>
<a href=https://packagist.org/packages/spiral/app target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/app/version alt="Latest Stable Version"></a></td>
<td>
<a href=https://github.com/spiral/app target=_blank rel=noopener>https://github.com/spiral/app</a></td>
</tr>
<tr>
<td>spiral/app-cli</td>
<td>
<a href=https://packagist.org/packages/spiral/app-cli target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/app-cli/version alt="Latest Stable Version"></a></td>
<td>
<a href=https://github.com/spiral/app-cli target=_blank rel=noopener>https://github.com/spiral/app-cli</a></td>
</tr>
<tr>
<td>spiral/app-grpc</td>
<td>
<a href=https://packagist.org/packages/spiral/app-grpc target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/app-grpc/version alt="Latest Stable Version"></a></td>
<td>
<a href=https://github.com/spiral/app-grpc target=_blank rel=noopener>https://github.com/spiral/app-grpc</a></td>
</tr>
</tbody>
</table>
<h2 id=核心组件>核心组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/core</td>
<td>
<a href=https://packagist.org/packages/spiral/core target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/core/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/core target=_blank rel=noopener><img src="https://travis-ci.org/spiral/core.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/core/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/core/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/boot</td>
<td>
<a href=https://packagist.org/packages/spiral/boot target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/boot/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/boot target=_blank rel=noopener><img src="https://travis-ci.org/spiral/boot.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/boot/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/boot/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/config</td>
<td>
<a href=https://packagist.org/packages/spiral/config target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/config/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/config target=_blank rel=noopener><img src="https://travis-ci.org/spiral/config.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/config/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/config/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=任务调度组件>任务调度组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/http</td>
<td>
<a href=https://packagist.org/packages/spiral/http target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/http/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/http target=_blank rel=noopener><img src="https://travis-ci.org/spiral/http.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/http/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/http/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/console</td>
<td>
<a href=https://packagist.org/packages/spiral/console target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/console/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/console target=_blank rel=noopener><img src="https://travis-ci.org/spiral/console.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/console/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/console/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/roadrunner</td>
<td>
<a href=https://packagist.org/packages/spiral/roadrunner target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/roadrunner/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/roadrunner target=_blank rel=noopener><img src="https://travis-ci.org/spiral/roadrunner.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/roadrunner/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/roadrunner/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/jobs</td>
<td>
<a href=https://packagist.org/packages/spiral/jobs target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/jobs/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/jobs target=_blank rel=noopener><img src="https://travis-ci.org/spiral/jobs.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/jobs/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/jobs/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/php-grpc</td>
<td>
<a href=https://packagist.org/packages/spiral/php-grpc target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/php-grpc/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/php-grpc target=_blank rel=noopener><img src="https://travis-ci.org/spiral/php-grpc.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/php-grpc/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/php-grpc/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=http-组件>HTTP 组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/cookies</td>
<td>
<a href=https://packagist.org/packages/spiral/cookies target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/cookies/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/cookies target=_blank rel=noopener><img src="https://travis-ci.org/spiral/cookies.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/cookies/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/cookies/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/csrf</td>
<td>
<a href=https://packagist.org/packages/spiral/csrf target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/csrf/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/csrf target=_blank rel=noopener><img src="https://travis-ci.org/spiral/csrf.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/csrf/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/csrf/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/hmvc</td>
<td>
<a href=https://packagist.org/packages/spiral/hmvc target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/hmvc/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/hmvc target=_blank rel=noopener><img src="https://travis-ci.org/spiral/hmvc.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/hmvc/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/hmvc/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/router</td>
<td>
<a href=https://packagist.org/packages/spiral/router target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/router/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/router target=_blank rel=noopener><img src="https://travis-ci.org/spiral/router.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/router/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/router/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/session</td>
<td>
<a href=https://packagist.org/packages/spiral/session target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/session/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/session target=_blank rel=noopener><img src="https://travis-ci.org/spiral/session.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/session/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/session/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/nyholm-bridge</td>
<td>
<a href=https://packagist.org/packages/spiral/nyholm-bridge target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/nyholm-bridge/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/nyholm-bridge target=_blank rel=noopener><img src="https://travis-ci.org/spiral/nyholm-bridge.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/nyholm-bridge/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/nyholm-bridge/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/auth-http</td>
<td>
<a href=https://packagist.org/packages/spiral/auth-http target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/auth-http/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/auth-http target=_blank rel=noopener><img src="https://travis-ci.org/spiral/auth-http.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/auth-http/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/auth-http/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=安全和验证组件>安全和验证组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/encryption</td>
<td>
<a href=https://packagist.org/packages/spiral/encrypter target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/encrypter/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/encrypter target=_blank rel=noopener><img src="https://travis-ci.org/spiral/encrypter.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/encrypter/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/encrypter/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/security</td>
<td>
<a href=https://packagist.org/packages/spiral/security target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/security/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/security target=_blank rel=noopener><img src="https://travis-ci.org/spiral/security.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/security/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/security/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/validation</td>
<td>
<a href=https://packagist.org/packages/spiral/validation target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/validation/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/validation target=_blank rel=noopener><img src="https://travis-ci.org/spiral/validation.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/validation/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/validation/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/filters</td>
<td>
<a href=https://packagist.org/packages/spiral/filters target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/filters/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/filters target=_blank rel=noopener><img src="https://travis-ci.org/spiral/filters.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/filters/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/filters/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/auth</td>
<td>
<a href=https://packagist.org/packages/spiral/auth target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/auth/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/auth target=_blank rel=noopener><img src="https://travis-ci.org/spiral/auth.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/auth/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/auth/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/auth-http</td>
<td>
<a href=https://packagist.org/packages/spiral/auth-http target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/auth-http/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/auth-http target=_blank rel=noopener><img src="https://travis-ci.org/spiral/auth-http.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/auth-http/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/auth-http/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=数据库组件>数据库组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/database</td>
<td>
<a href=https://packagist.org/packages/spiral/database target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/database/version alt="Latest Stable Version"></a>
<a href=https://github.com/spiral/database/actions target=_blank rel=noopener><img src=https://github.com/spiral/database/workflows/build/badge.svg alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/database/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/database/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/migrations</td>
<td>
<a href=https://packagist.org/packages/spiral/migrations target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/migrations/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/migrations target=_blank rel=noopener><img src="https://travis-ci.org/spiral/migrations.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/migrations/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/migrations/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=cycle-orm>Cycle ORM</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>cycle/orm</td>
<td>
<a href=https://packagist.org/packages/cycle/orm target=_blank rel=noopener><img src=https://poser.pugx.org/cycle/orm/version alt="Latest Stable Version"></a>
<a href=https://github.com/cycle/orm/actions target=_blank rel=noopener><img src=https://github.com/cycle/orm/workflows/build/badge.svg alt="Build Status"></a>
<a href="https://scrutinizer-ci.com/g/cycle/orm/?branch=master" target=_blank rel=noopener><img src="https://scrutinizer-ci.com/g/cycle/orm/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
<a href=https://codecov.io/gh/cycle/orm target=_blank rel=noopener><img src=https://codecov.io/gh/cycle/orm/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>cycle/schema-builder</td>
<td>
<a href=https://packagist.org/packages/cycle/schema-builder target=_blank rel=noopener><img src=https://poser.pugx.org/cycle/schema-builder/version alt="Latest Stable Version"></a>
<a href=https://github.com/cycle/schema-builder/actions target=_blank rel=noopener><img src=https://github.com/cycle/schema-builder/workflows/build/badge.svg alt="Build Status"></a>
<a href="https://scrutinizer-ci.com/g/cycle/schema-builder/?branch=master" target=_blank rel=noopener><img src="https://scrutinizer-ci.com/g/cycle/schema-builder/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
<a href=https://codecov.io/gh/cycle/schema-builder target=_blank rel=noopener><img src=https://codecov.io/gh/cycle/schema-builder/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>cycle/annotated</td>
<td>
<a href=https://packagist.org/packages/cycle/annotated target=_blank rel=noopener><img src=https://poser.pugx.org/cycle/annotated/version alt="Latest Stable Version"></a>
<a href=https://github.com/cycle/annotated/actions target=_blank rel=noopener><img src=https://github.com/cycle/annotated/workflows/build/badge.svg alt="Build Status"></a>
<a href="https://scrutinizer-ci.com/g/cycle/annotated/?branch=master" target=_blank rel=noopener><img src="https://scrutinizer-ci.com/g/cycle/annotated/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
<a href=https://codecov.io/gh/cycle/annotated target=_blank rel=noopener><img src=https://codecov.io/gh/cycle/annotated/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>cycle/proxy-factory</td>
<td>
<a href=https://packagist.org/packages/cycle/proxy-factory target=_blank rel=noopener><img src=https://poser.pugx.org/cycle/proxy-factory/version alt="Latest Stable Version"></a>
<a href=https://github.com/cycle/proxy-factory/actions target=_blank rel=noopener><img src=https://github.com/cycle/proxy-factory/workflows/build/badge.svg alt="Build Status"></a>
<a href="https://scrutinizer-ci.com/g/cycle/proxy-factory/?branch=master" target=_blank rel=noopener><img src="https://scrutinizer-ci.com/g/cycle/proxy-factory/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
<a href=https://codecov.io/gh/cycle/proxy-factory target=_blank rel=noopener><img src=https://codecov.io/gh/cycle/proxy-factory/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>cycle/migrations</td>
<td>
<a href=https://packagist.org/packages/cycle/migrations target=_blank rel=noopener><img src=https://poser.pugx.org/cycle/migrations/version alt="Latest Stable Version"></a>
<a href=https://github.com/cycle/migrations/actions target=_blank rel=noopener><img src=https://github.com/cycle/migrations/workflows/build/badge.svg alt="Build Status"></a>
<a href="https://scrutinizer-ci.com/g/cycle/migrations/?branch=master" target=_blank rel=noopener><img src="https://scrutinizer-ci.com/g/cycle/migrations/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
<a href=https://codecov.io/gh/cycle/migrations target=_blank rel=noopener><img src=https://codecov.io/gh/cycle/migrations/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=stempler-模板引擎>Stempler 模板引擎</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/stempler</td>
<td>
<a href=https://packagist.org/packages/spiral/stempler target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/stempler/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/stempler target=_blank rel=noopener><img src="https://travis-ci.org/spiral/stempler.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/stempler/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/stempler/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/stempler-bridge</td>
<td>
<a href=https://packagist.org/packages/spiral/stempler-bridge target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/stempler-bridge/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/stempler-bridge target=_blank rel=noopener><img src="https://travis-ci.org/spiral/stempler-bridge.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/stempler-bridge/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/stempler-bridge/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=功能组件>功能组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/exceptions</td>
<td>
<a href=https://packagist.org/packages/spiral/exceptions target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/exceptions/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/exceptions target=_blank rel=noopener><img src="https://travis-ci.org/spiral/exceptions.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/exceptions/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/exceptions/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/pagination</td>
<td>
<a href=https://packagist.org/packages/spiral/pagination target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/pagination/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/pagination target=_blank rel=noopener><img src="https://travis-ci.org/spiral/pagination.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/pagination/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/pagination/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/files</td>
<td>
<a href=https://packagist.org/packages/spiral/files target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/files/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/files target=_blank rel=noopener><img src="https://travis-ci.org/spiral/files.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/files/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/files/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/streams</td>
<td>
<a href=https://packagist.org/packages/spiral/streams target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/streams/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/streams target=_blank rel=noopener><img src="https://travis-ci.org/spiral/streams.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/streams/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/streams/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/logger</td>
<td>
<a href=https://packagist.org/packages/spiral/logger target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/logger/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/logger target=_blank rel=noopener><img src="https://travis-ci.org/spiral/logger.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/logger/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/logger/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/tokenizer</td>
<td>
<a href=https://packagist.org/packages/spiral/tokenizer target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/tokenizer/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/tokenizer target=_blank rel=noopener><img src="https://travis-ci.org/spiral/tokenizer.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/tokenizer/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/tokenizer/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/snapshots</td>
<td>
<a href=https://packagist.org/packages/spiral/snapshots target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/snapshots/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/snapshots target=_blank rel=noopener><img src="https://travis-ci.org/spiral/snapshots.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/snapshots/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/snapshots/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/translator</td>
<td>
<a href=https://packagist.org/packages/spiral/translator target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/translator/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/translator target=_blank rel=noopener><img src="https://travis-ci.org/spiral/translator.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/translator/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/translator/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/models</td>
<td>
<a href=https://packagist.org/packages/spiral/models target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/models/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/models target=_blank rel=noopener><img src="https://travis-ci.org/spiral/models.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/models/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/models/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/debug</td>
<td>
<a href=https://packagist.org/packages/spiral/debug target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/debug/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/debug target=_blank rel=noopener><img src="https://travis-ci.org/spiral/debug.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/debug/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/debug/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/dumper</td>
<td>
<a href=https://packagist.org/packages/spiral/dumper target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/dumper/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/dumper target=_blank rel=noopener><img src="https://travis-ci.org/spiral/dumper.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/dumper/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/dumper/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/views</td>
<td>
<a href=https://packagist.org/packages/spiral/views target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/views/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/views target=_blank rel=noopener><img src="https://travis-ci.org/spiral/views.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/views/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/views/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/storage</td>
<td>
<a href=https://packagist.org/packages/spiral/storage target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/storage/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/storage target=_blank rel=noopener><img src="https://travis-ci.org/spiral/storage.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/storage/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/storage/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/reactor</td>
<td>
<a href=https://packagist.org/packages/spiral/reactor target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/reactor/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/reactor target=_blank rel=noopener><img src="https://travis-ci.org/spiral/reactor.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/reactor/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/reactor/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/annotations</td>
<td>
<a href=https://packagist.org/packages/spiral/annotations target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/annotations/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/annotations target=_blank rel=noopener><img src="https://travis-ci.org/spiral/annotations.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/annotations/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/annotations/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/broadcast</td>
<td>
<a href=https://packagist.org/packages/spiral/broadcast target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/broadcast/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/broadcast target=_blank rel=noopener><img src="https://travis-ci.org/spiral/broadcast.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/broadcast/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/broadcast/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/data-grid</td>
<td>
<a href=https://packagist.org/packages/spiral/data-grid target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/data-grid/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/data-grid target=_blank rel=noopener><img src="https://travis-ci.org/spiral/data-grid.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/data-grid/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/data-grid/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=协同组件>协同组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>当前状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/dotenv-bridge</td>
<td>
<a href=https://packagist.org/packages/spiral/dotenv-bridge target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/dotenv-bridge/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/dotenv-bridge target=_blank rel=noopener><img src="https://travis-ci.org/spiral/dotenv-bridge.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/dotenv-bridge/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/dotenv-bridge/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/monolog-bridge</td>
<td>
<a href=https://packagist.org/packages/spiral/monolog-bridge target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/monolog-bridge/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/monolog-bridge target=_blank rel=noopener><img src="https://travis-ci.org/spiral/monolog-bridge.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/monolog-bridge/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/monolog-bridge/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/twig-bridge</td>
<td>
<a href=https://packagist.org/packages/spiral/twig-bridge target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/twig-bridge/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/twig-bridge target=_blank rel=noopener><img src="https://travis-ci.org/spiral/twig-bridge.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/twig-bridge/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/twig-bridge/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/sentry-bridge</td>
<td>
<a href=https://packagist.org/packages/spiral/sentry-bridge target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/sentry-bridge/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/sentry-bridge target=_blank rel=noopener><img src="https://travis-ci.org/spiral/sentry-bridge.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/sentry-bridge/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/sentry-bridge/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=开发组件>开发组件</h2>
<table>
<thead>
<tr>
<th>组件</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>spiral/scaffolder</td>
<td>
<a href=https://packagist.org/packages/spiral/scaffolder target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/scaffolder/v/stable alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/scaffolder target=_blank rel=noopener><img src="https://travis-ci.org/spiral/scaffolder.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/scaffolder/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/scaffolder/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/prototype</td>
<td>
<a href=https://packagist.org/packages/spiral/prototype target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/prototype/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/prototype target=_blank rel=noopener><img src="https://travis-ci.org/spiral/prototype.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/prototype/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/prototype/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/annotations</td>
<td>
<a href=https://packagist.org/packages/spiral/annotations target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/annotations/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/annotations target=_blank rel=noopener><img src="https://travis-ci.org/spiral/annotations.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/annotations target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/annotations/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/composer-publish-plugin</td>
<td>
<a href=https://packagist.org/packages/spiral/composer-publish-plugin target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/composer-publish-plugin/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/composer-publish-plugin target=_blank rel=noopener><img src="https://travis-ci.org/spiral/composer-publish-plugin.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/composer-publish-plugin/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/composer-publish-plugin/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
<tr>
<td>spiral/code-style</td>
<td>
<a href=https://packagist.org/packages/spiral/code-style target=_blank rel=noopener><img src=https://poser.pugx.org/spiral/code-style/version alt="Latest Stable Version"></a>
<a href=https://travis-ci.org/spiral/code-style target=_blank rel=noopener><img src="https://travis-ci.org/spiral/code-style.svg?branch=master" alt="Build Status"></a>
<a href=https://codecov.io/gh/spiral/code-style/ target=_blank rel=noopener><img src=https://codecov.io/gh/spiral/code-style/branch/master/graph/badge.svg alt=Codecov></a></td>
</tr>
</tbody>
</table>
<h2 id=开源协议>开源协议</h2>
<p>MIT License (MIT). 请阅读
<a href=/docs/about/license/><code>LICENSE</code></a> 了解详情. 项目由
<a href=https://spiralscout.com target=_blank rel=noopener>Spiral Scout</a> 维护。</p>
</div>
<div class=article-widget>
<div class=post-nav>
</div>
</div>
</div>
<div class=body-footer>
<p>最近更新于 2020-03-16</p>
<p class=edit-page>
<a href=https://github.com/krwu/spiraldocs/edit/feat/chinese/zh_CN/_index.md>
<i class="fas fa-pen pr-2"></i>编辑本页
</a>
</p>
</div>
</article>
<footer class=site-footer>
<p class=powered-by><span class=copyright>© 2019 - 2021 <a href=https://studyspiral.cn/>StudySpiral</a> All rights reserved.</span>
</p>
<p class=powered-by>
<a href=http://www.beian.miit.gov.cn/ target=_blank rel="noopener noreferer">粤ICP备14011364号</a>
<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44030402001866" target=_blank rel="noopener noreferer"><img style=display:inline-block src=/img/gaba.png>粤公网安备 44030402001866号</a>
</p>
<p id=webify class=powered-by style=display:flex><span style="margin:0 .2rem 0 0;display:block;height:20px;line-height:20px">Powered by</span> <a href=https://webify.cloudbase.net/ target=_blank rel=noopener>CloudBase Webify</a></p>
<script async defer>window.addEventListener('DOMContentLoaded',()=>{const{host:a}=window.location;(a.toLocaleLowerCase()==='docs.studyspiral.cn'||a.indexOf(".app.tcloudbase.com"))&&(document.getElementById('webify').style.display='flex')})</script>
</footer>
</main>
</div>
</div>
<script src=https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin=anonymous></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.4/imagesloaded.pkgd.min.js integrity="sha256-lqvxZrPLtfffUl2G/e7szqSvPBILGbwmsGE1MKlOi0Q=" crossorigin=anonymous></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/3.0.6/isotope.pkgd.min.js integrity="sha256-CBrpuqrMhXwcLLUd5tvQ4euBHCdh7wGlDfNz8vbu/iI=" crossorigin=anonymous></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js integrity="sha256-yt2kYMy0w8AbtF89WXb2P1rfjcP/HTHLT7097U8Y5b8=" crossorigin=anonymous></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/highlight.min.js integrity="sha256-eOgo0OtLL4cdq7RdwRUiGKLX9XsIJ7nGhWEKbohmVAQ=" crossorigin=anonymous></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/languages/go.min.js></script>
<script>const code_highlighting=!0</script>
<script>const isSiteThemeDark=!1</script>
<script>const search_config={indexURI:"/index.json",minLength:1,threshold:.3},i18n={no_results:"没有找到结果",placeholder:"搜索...",results:"搜索结果"},content_type={post:"文章",project:"项目",publication:"出版物",talk:"演讲"}</script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.1.1/anchor.min.js integrity="sha256-pB/deHc9CGfFpJRjC43imB29Rse8tak+5eXqntO94ck=" crossorigin=anonymous></script>
<script>anchors.add()</script>
<script id=search-hit-fuse-template type=text/x-template>
      <div class="search-hit" id="summary-{{key}}">
      <div class="search-hit-content">
        <div class="search-hit-name">
          <a href="{{relpermalink}}">{{title}}</a>
          <div class="article-metadata search-hit-type">{{type}}</div>
          <p class="search-hit-description">{{snippet}}</p>
        </div>
      </div>
      </div>
    </script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.1/fuse.min.js integrity="sha256-VzgmKYmhsGNNN4Ph1kMW+BjoYJM2jV5i4IlFoeZA9XI=" crossorigin=anonymous></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/jquery.mark.min.js integrity="sha256-4HLtjeVgH0eIB3aZ9mLYF6E8oU5chNdjU6p6rrXpl9U=" crossorigin=anonymous></script>
<script src=/js/academic.min.6f1005d1a84220e2f466ff3d8e712f31.js></script>
<div id=modal class="modal fade" role=dialog>
<div class=modal-dialog>
<div class=modal-content>
<div class=modal-header>
<h5 class=modal-title>引用</h5>
<button type=button class=close data-dismiss=modal aria-label=Close>
<span aria-hidden=true>&#215;</span>
</button>
</div>
<div class=modal-body>
<pre><code class="tex hljs"></code></pre>
</div>
<div class=modal-footer>
<a class="btn btn-outline-primary my-1 js-copy-cite" href=# target=_blank>
<i class="fas fa-copy"></i> 复制
</a>
<a class="btn btn-outline-primary my-1 js-download-cite" href=# target=_blank>
<i class="fas fa-download"></i> 下载
</a>
<div id=modal-error></div>
</div>
</div>
</div>
</div>
</body>
</html>